package com.ywger.web.config.db;

import lombok.Data;
import org.springframework.stereotype.Component;

/**
 * @author chenmeng
 * @date 2021-07-06 20:14
 * @desc 公有配置
 */
@Data
@Component
public class DuridConfig {

    private   String mybatisPackage;
    private   String mybatisMapperLocation ;


    private String url;

    private String username;

    private String password;

    private String type ="com.alibaba.druid.pool.DruidDataSource";

    /**
     * 这一项可配可不配，如果不配置druid会根据url自动识别dbType，然后选择相应的driverClassName
     */
    private String driverClassName;

    /**
     * 配置 初始化大小、最小、最大
     */
    private int initialSize = 5;

    private int minIdle = 5;

    private int maxActive = 20;

    /**
     * 获取连接等待超时时间
     */
    private int maxWait = 60000;

    /**
     * 间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒
     */
    private int timeBetweenEvictionRunsMillis = 60000;

    /**
     * 个连接在池中最小生存的时间，单位是毫秒
     */
    private int minEvictableIdleTimeMillis = 300000;
    private int maxEvictableIdleTimeMillis = 900000;

    private String validationQuery = "select 1";

    /**
     * 建议配置为true，不影响性能，并且保证安全性。申请连接的时候检测，
     * 如果空闲时间大于timeBetweenEvictionRunsMillis，执行validationQuery检测连接是否有效
     */
    private boolean testWhileIdle =true;

    /**
     * 申请连接时执行validationQuery检测连接是否有效，做了这个配置会降低性能。
     */
    private boolean testOnBorrow = false;
    /**
     * 归还连接时执行validationQuery检测连接是否有效，做了这个配置会降低性能。
     */
    private boolean testOnReturn = false;

    /**
     * 是否缓存preparedStatement，也就是PSCache。PSCache对支持游标的数据库性能提升巨大，比如说oracle。在mysql下建议关闭。
     */
    private boolean poolPreparedStatements = false;

    /**
     * 要启用PSCache，必须配置大于0，当大于0时，poolPreparedStatements自动触发修改为true。
     * 在Druid中，不会存在Oracle下PSCache占用内存过多的问题，可以把这个数值配置大一些，比如说100
     */
    private int maxPoolPreparedStatementPerConnectionSize = -1;

    /**
     * 监控统计用的filter:stat
     * 日志用的filter:log4j,logback使用slf4j
     * 防御sql注入的filter:wall
     */
    private String filters="stat,wall,slf4j";

    /**
     *  如果配置了proxyFilters，此配置可以不配置
     *  druid.stat.mergeSql=true 合并执行的相同sql，避免因为参数不同而统计多条sql语句
     *  druid.stat.slowSqlMillis=10000 用来配置SQL慢的标准，执行时间超过slowSqlMillis的就是慢
     */
    private String connectionProperties ="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000";


}
